#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
WebDAV服务器主程序

基于FastAPI的WebDAV服务器实现
"""

import os
import sys
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent.parent
sys.path.insert(0, str(project_root))

from src.common.unified_logging import get_logger, init_unified_logging
from src.web.webdav.fastapi_webdav_handler import create_fastapi_webdav_app
import uvicorn


def start_webdav_server(host='127.0.0.1', port=8080, vfs_client=None):
    """
    启动WebDAV服务器
    
    Args:
        host: 服务器地址
        port: 服务器端口
        vfs_client: VFS客户端实例（可选）
    """
    logger = get_logger('WebDAVServer')
    
    try:
        # 初始化统一日志
        init_unified_logging()
        
        logger.info("=" * 60)
        logger.info("启动FastAPI WebDAV服务器")
        logger.info("=" * 60)
        
        # 创建FastAPI应用
        app = create_fastapi_webdav_app(vfs_client)
        
        logger.info("FastAPI WebDAV应用创建成功")
        logger.info(f"服务地址: http://{host}:{port}")
        logger.info(f"WebDAV服务: http://{host}:{port}/dav")
        logger.info("测试用户: testuser / testpass123")
        logger.info("按 Ctrl+C 停止服务")
        
        # 启动服务器
        uvicorn.run(
            app,
            host=host,
            port=port,
            log_level="info",
            access_log=True
        )
        
    except KeyboardInterrupt:
        logger.info("收到停止信号，正在关闭服务器...")
    except Exception as e:
        logger.error(f"服务器启动失败: {e}")
        raise


def main():
    """主函数"""
    import argparse
    
    parser = argparse.ArgumentParser(
        description='FastAPI WebDAV服务器',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog='''
示例:
  # 使用默认配置启动服务器
  python src/web/webdav/webdav_server.py
  
  # 指定主机和端口
  python src/web/webdav/webdav_server.py --host 0.0.0.0 --port 8080
  
  # 启用调试模式
  python src/web/webdav/webdav_server.py --debug
        '''
    )
    
    parser.add_argument(
        '--host',
        default='127.0.0.1',
        help='服务器地址 (默认: 127.0.0.1)'
    )
    
    parser.add_argument(
        '--port',
        type=int,
        default=8080,
        help='服务器端口 (默认: 8080)'
    )
    
    parser.add_argument(
        '--debug',
        action='store_true',
        help='启用调试模式'
    )
    
    args = parser.parse_args()
    
    # 设置环境变量
    if args.debug:
        os.environ['DEBUG'] = '1'
    
    # 启动服务器
    start_webdav_server(host=args.host, port=args.port)


if __name__ == '__main__':
    main()